我有開發一款新的Powerbuilder的混淆器。
支持版本:pkb2.5;pb5-12
1.移除部份文字,從而使得反組譯無法還原文字
2.可執行碼的混淆
3.邏輯陷阱,阻止反組譯程序獲取源碼
4.支持現在常用的pb版本。最新支持到12
博客:http://blog.csdn.net/chengg0769
下載網址:http://chengg0769.download.csdn.net/
用於powerbuilder5-12的代碼混淆和加密。
博客:http://blog.csdn.net/chengg0769
下載網址:http://chengg0769.download.csdn.net/
主要特點:
1.修改了部分關鍵點參數,誘導早期的一些反編譯器崩潰。沒有人維護的反編譯器就讓他退出破解的應用場合吧。至於工程恢復,那是另話。
2.代碼混淆部分原理參考LJTT的PowerShield1.0簡易版,並在其基礎上擴展出一些新的方式。還有些東西在腦子裡,暫未實現。
2.1加入隨機變化因子,這樣使得反混淆器算法難度增加;
2.2增加了欺騙和邏輯陷阱,這些陷阱靠人眼是可以分析和發現的,但因為人腦是有邏輯思維能力,而靠編程是無法去理解我偽造的假代碼的邏輯性的。
從而會陷入我預設的邏輯陷阱中。
Beta後會擴展:
2.3在當前的工作基礎上(9種)增加至36種(or 100種)左右的混淆方式,並限制在單機能測試到所有混淆方式,這樣開發反編譯器的人因為無法
測試到所有可能性,從而加大反混淆的難度。最主要是混雜一些看似是正常代碼的假跳轉,(包括直接偽造本地變量參與的表達式,讓人難辨真偽)相似
性越高,越不容易判定,致使反混淆無法運用程序進行歸納識別。
2.4混淆前,查看變量列表中有否有一些可利用的變量,如int,long類型,可以進行偽造假的代碼並添加進來與真實代碼混雜在一起,或者對真實代碼
形成包裹與混雜,相似性更高。
2.5將多種方式離散在多個發行版本中。從而讓反編譯器無所適從。離散也包括按機器特徵,時間,版本,授權種類等。盡量分散。
2.6其他動態語言的混淆器還沒去參考,因為想先有個基本實現。 java,c#等的混淆器應該已經很成熟,可以藉鑑。
2.7還將在更多的數據段進行偽造。偽造的一個好處是,想反編譯必須得先理順並歸置到偽造前。這個有點難。還有一個公理是:pb執行時是動態的,
他用到的才會去呼叫並調用內存。而偽造的絕對不會被呼叫。但,但,反編譯器並不知道,所以任何東東都會去屁顛屁顛地分析。
2.8數字和文字的等效替換,防止pj者直接搜索敏感位置。
2.9考慮到我的實現受制於代碼長度,可利用代碼太少,版本差異等因素,想到可給編程者預留陷阱標誌(混淆器代為擾亂),程序員在代碼編寫上主動
防禦,則混淆後真假難分,模糊程度更好,陷阱隱蔽性更好。
3.抹掉所有不必要的可視文字,如RefListObject文字,var變量名,function名字和參數等文字。如此反編譯器只能重新命名,從而無法還原可讀性。代碼功能
的閱讀在沒有備註的情況下,很大程度依賴變量名,函數名。我們都是程序員,這個道理都懂。因函數與時間都可能被全局呼叫或動態呼叫(寫在引號內),所以
目前暫未對函數和事件名字採取措施。處理上應該也相當麻煩。
4.增加了欺騙對像或函數。雖然借助對本軟件的反複調試,反混淆器作者可以發現規律,但是因為欺騙對象帶隨機因子,在沒有參考物的情況下,要校驗一個對
象的格式完整性和正確性,目前還沒人有那個能力。除非就是到處用斷言,總歸很難判定。就如用視覺鑑別一瓶純淨水和一瓶汽油一樣。反混淆器就會不小心陷
入其中。
5.增加對象內函數或事件造假功能。因為考慮到反編譯器會提供單點反編的調試開關,所以盡量細化到每個pbd文件,每個對象,每個函數事件,每段代碼都可能
出現阻止反編譯器的有效手段。如果能輕易繞過,那豈不是白搭。上2.9就是居於這種考慮。
除反混淆和反編譯開發者外,一些使用反編譯器的普通人是不知道反編譯器為什麼會中途異常退出的,因為他們沒反編譯器源碼,也無法單步調試。
他們對此種情況也無能為力(要的就是這種效果)。反編譯器開發者也不會去為一個不確定的規律而修改程序。
6.對一些可有可無,但對pbd格式肉眼分析有幫助的地方都盡數抹掉了,從而增加肉眼人工分析的錯覺感。我的原則是抹掉一切可抹掉之字節,擾亂一切可擾亂
的字節。
因為我并沒有趕上流行那陣子使用Powerbuilder啊。所以只能在現在寫出這個工具,希望還有人能用到它,就是美事。